
// 自己的实现
// function createCurry(fn, surplusLen, args) {
//   return function () {
//     const innerArgs = [].slice.call(arguments)
//     const finshLen = surplusLen - innerArgs.length
//     const finshArgs = [...args,...innerArgs]
//     if (finshLen > 0) {
//       return createCurry(fn, finshLen, finshArgs)
//     } else {
//       return fn.apply(null, finshArgs)
//     }
//   }
// }

// function currying(fn,...args) {
//   const sumLen = fn.length || 0
//   const argsLen = args.length
//   if (argsLen<sumLen) {
//     return createCurry(fn, sumLen - argsLen, args)
//   } else {
//     return fn.apply(null,args)
//   }
// }

// 路白老师的实现

function currying(fn,...args) {
  const originFnLength = fn.length
  let allArgs = [...args]
  const resFn = (...newArgs)=>{
    allArgs = [...allArgs,...newArgs]
    if (allArgs.length>=originFnLength) {
      return fn(...allArgs)
    } else {
      return resFn
    }
  }
  return resFn
}

const add = (a, b, c) => a + b + c
const a1 = currying(add, 5)
const a2 = a1(2)
// console.log(a2(3))
// console.log(currying(add, 5)(3,5))


// fn.length 是值函数有默认参数的形参前的参数的个数
var add1 = (a, b=2, c) => a + b + c
console.log(add1.length) // 1

var add2 = (a, b, c) => a + b + c
console.log(add2.length) // 3